package Funcionalidades.ABMCompetencia;

import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import Funcionalidades.Menues.FrameUsuarioAutenticado;
import Funcionalidades.Menues.iDialogGeneral;
import Gestores.GestorCompetencia;
import Gestores.GestorParticipante;
import Entidades.EntidadesDTO.DatosDTO;
import Entidades.EntidadesDTO.ParticipanteDTO;
import Entidades.EntidadesLogica.*;

import ActionListeners.*;



import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.Component;
import javax.swing.Box;
import javax.swing.SwingConstants;
import javax.swing.border.TitledBorder;
import javax.swing.ImageIcon;
import javax.swing.border.LineBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.sql.SQLException;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.BoxLayout;

public class altaParticipante extends iDialogGeneral {

	private static final long serialVersionUID = 1L;
	private JTextField txtNombreParticipante;
	private JTextField txtCorreoElectronico;
	private JTextField txtDireccionfoto;
	
	private boolean actividad;
	private String nombreParticipante;
	private String correoElectronico;
	private ImageIcon nuevoIcono= null;
	
	public boolean isActividad() {
		return actividad;
	}

	public void setActividad(boolean actividad) {
		this.actividad = actividad;
	}

	public String getNombreParticipante() {
		return nombreParticipante;
	}

	public void setNombreParticipante(String nombreParticipante) {
		this.nombreParticipante = nombreParticipante;
	}

	public String getCorreoElectronico() {
		return correoElectronico;
	}

	public void setCorreoElectronico(String correoElectronico) {
		this.correoElectronico = correoElectronico;
	}

	
	public Participante getNuevo() {
		return nuevo;
	}

	public void setNuevo(Participante nuevo) {
		this.nuevo = nuevo;
	}

	private Participante nuevo;
	
	private String getTxtNombreParticipante() {
		return txtNombreParticipante.getText();
	}

	private String getTxtCorreoElectronico() {
		return txtCorreoElectronico.getText();
	}

	private String getTxtDireccionfoto() {
		return txtDireccionfoto.toString();
	}
	

	private GestorParticipante gParticipante;
	



	//Actividad es false si es nuevo, y true si es modificar
	public altaParticipante(FrameUsuarioAutenticado frame,Participante participante, boolean actividad, Competencia competencia) {
		super(frame,true);
		
		gParticipante=gParticipante.getGestorParticipante();

		setActividad(actividad);
		
		Dimension tam= new Dimension(400, 450);
		setTamanio(tam);
		
		setObligatorios(new Vector<Object>());
		
		label= new Dimension(150,30);
		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		
		JPanel panelTitulo = new JPanel();
		getContentPane().add(panelTitulo);
		panelTitulo.setMaximumSize(panel);

		JLabel lblTitulo = new JLabel("Alta Participante");
		lblTitulo.setFont(new Font("Vani", Font.PLAIN, 20));
		panelTitulo.add(lblTitulo);

		JPanel pnlNombre = new JPanel();
		FlowLayout flowLayout = (FlowLayout) pnlNombre.getLayout();
		flowLayout.setAlignment(FlowLayout.CENTER);
		getContentPane().add(pnlNombre);
		pnlNombre.setMaximumSize(panel);
		
		JLabel lblNombreDelParticipante = new JLabel("Nombre del Participante: ");
		lblNombreDelParticipante.setHorizontalAlignment(SwingConstants.LEFT);
		pnlNombre.add(lblNombreDelParticipante);
		lblNombreDelParticipante.setPreferredSize(label);
				
		txtNombreParticipante = new JTextField();
		pnlNombre.add(txtNombreParticipante);
		txtNombreParticipante.setPreferredSize(datos);
		txtNombreParticipante.addKeyListener(new MascaraMayusculakeyListener());
		
		JPanel pnlContacto = new JPanel();
		FlowLayout flowLayout1 = (FlowLayout) pnlContacto.getLayout();
		flowLayout1.setAlignment(FlowLayout.CENTER);
		getContentPane().add(pnlContacto);
		pnlContacto.setMaximumSize(panel);
		
		JLabel lblCorreoElectronico = new JLabel("Correo Electronico:");
		lblCorreoElectronico.setHorizontalAlignment(SwingConstants.LEFT);
		pnlContacto.add(lblCorreoElectronico);
		lblCorreoElectronico.setPreferredSize(label);
			
		txtCorreoElectronico = new JTextField();
		pnlContacto.add(txtCorreoElectronico);
		txtCorreoElectronico.setPreferredSize(datos);
		txtCorreoElectronico.addKeyListener(new MascaraMayusculakeyListener());
		
		
		Component verticalStrut = Box.createVerticalStrut(20);
		getContentPane().add(verticalStrut);
		
		JPanel pnlImagen = new JPanel();
		getContentPane().add(pnlImagen);
		
		JPanel pnlimage = new JPanel();
		pnlimage.setBorder(new TitledBorder(null, "Imagen (Opcional) ", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		pnlImagen.add(pnlimage);
		pnlimage.setPreferredSize(new Dimension(300,200));
		
		ImageIcon icon = new ImageIcon(altaParticipante.class.getResource("/Imagenes/participante.png"));
		Image img = icon.getImage();
		Image newimg = img.getScaledInstance(128, 128,  java.awt.Image.SCALE_SMOOTH);
		ImageIcon newIcon = new ImageIcon(newimg);
		pnlimage.setLayout(new BoxLayout(pnlimage, BoxLayout.Y_AXIS));
		
		JPanel panelimagen = new JPanel();
		pnlimage.add(panelimagen);
		
		JPanel buttonPane = new JPanel();
		buttonPane.setMaximumSize(panel);
		
		final JLabel label = new JLabel("");
		panelimagen.add(label);
		label.setBorder(new LineBorder(new Color(0, 0, 0), 1, true));
		label.setIcon(newIcon);
		label.setToolTipText("Imagen del Participante");
		
		JPanel panelBoton = new JPanel();
		pnlimage.add(panelBoton);
				
		txtDireccionfoto = new JTextField();
		txtDireccionfoto.setEnabled(false);
		txtDireccionfoto.setEditable(false);
		txtDireccionfoto.addKeyListener(new MascaraMayusculakeyListener());
		txtDireccionfoto.setText("nombreImagen.jpg");
		panelBoton.add(txtDireccionfoto);
		txtDireccionfoto.setPreferredSize(datos);

		JButton btnSeleccionar = new JButton("Seleccionar");
		panelBoton.add(btnSeleccionar);
		btnSeleccionar.addActionListener(
				new ActionListener() {
					 public void actionPerformed(ActionEvent e) {
				         JFileChooser selector = new JFileChooser();
						 selector.setFileFilter(new FileNameExtensionFilter("JPG, PNG & GIF","jpg","png","gif"));
						 int estado = selector.showOpenDialog(null);
						 File archivoelegido = selector.getSelectedFile();
						 String ruta = archivoelegido.getAbsolutePath();
						 if (estado==JFileChooser.APPROVE_OPTION){
							 ImageIcon nuevoIcon = new ImageIcon(ruta);
							 Image nuevaImg = nuevoIcon.getImage();
							 Image nuevaImagen = nuevaImg.getScaledInstance(128, 128,  java.awt.Image.SCALE_SMOOTH);
							 nuevoIcono = new ImageIcon(nuevaImagen);
							 label.setIcon(nuevoIcono);
							 txtDireccionfoto.setText(ruta);
						 	}
						 
						 }	 
					 });
		
		buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
		getContentPane().add(buttonPane);
		
		JButton okButton = new JButton("Aceptar");
		okButton.setActionCommand("OK");
		buttonPane.add(okButton);
		okButton.addActionListener(new altaParticipanteAction());

		Component horizontalStrut = Box.createHorizontalStrut(20);
		buttonPane.add(horizontalStrut);

		JButton cancelButton = new JButton("Cancelar");
		cancelButton.setActionCommand("Cancel");
		cancelButton.addActionListener(new altaParticipanteAction());
		buttonPane.add(cancelButton);

		getObligatorios().add(txtCorreoElectronico);
		getObligatorios().add(txtNombreParticipante);
		
		txtCorreoElectronico.setText(correoElectronico);
		txtNombreParticipante.setText(nombreParticipante);

	}
	
class altaParticipanteAction extends AbstractAction{

	
		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent e) {
			JButton llamador=(JButton) e.getSource();
			ParticipanteDTO nuevoParticipante=null;
			DatosDTO nuevosDatosParticipante=null;
			
			if(llamador.getActionCommand().equals("OK")){
				//TODO NUEVO=AL PARTICIPANTE CON LOS DATOS
				try {
					isEmail(txtCorreoElectronico.getText());
					try{
						GestorCompetencia gestComp = GestorCompetencia.getGestorCompetencia();
						gestComp.verificarEstado();
					
						if (nuevoIcono != null)
							nuevosDatosParticipante = new DatosDTO(txtNombreParticipante.getText(), txtCorreoElectronico.getText(), null, nuevoIcono.getImage());
						else
							nuevosDatosParticipante = new DatosDTO(txtNombreParticipante.getText(), txtCorreoElectronico.getText(), null, null);
						nuevoParticipante = new ParticipanteDTO(nuevosDatosParticipante,null,null);
						try{
							GestorParticipante gestPart = GestorParticipante.getGestorParticipante();
							if (!txtDireccionfoto.getText().equals("nombreImagen.jpg"))
								gestPart.darDeAltaParticipante(nuevoParticipante, txtDireccionfoto.getText());
							else
								gestPart.darDeAltaParticipante(nuevoParticipante, null);
							}
						catch(SQLException s){
							System.err.println(s.getMessage());
						}
					catch(Throwable t){
							if(t.getMessage()!=null)
							System.err.println(t.getMessage());
					}
					getParent().setFocusable(true);
					dispose();
				}
				catch (Throwable a) {
					System.out.println(a.getMessage());
				}
				} catch (Throwable e1) {
					// TODO Auto-generated catch block
					Toolkit.getDefaultToolkit().beep();
					JOptionPane.showMessageDialog(getFramePerteneciente(), e1.getMessage(),null,
							JOptionPane.INFORMATION_MESSAGE);
				}
				
			}
			else if (llamador.getActionCommand().equals("Cancel")){
				getParent().setFocusable(true);
				dispose();
			}
		}
}
		
		
public void isEmail(String correo) throws Throwable {
        Pattern pat = null;
        Matcher mat = null;        
        pat = Pattern.compile("^[\\w\\-\\_\\+]+(\\.[\\w\\-\\_]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$");
        mat = pat.matcher(correo);
        if (!mat.find()){
        	Throwable t = new Throwable("Formate de Email no valido");
        	throw t;
        	}
        }
}
		